#include "vec4.h"
#include <iostream>
#include <math.h>
using namespace std;

vec4 operator+ (vec4 v1, vec4 v2){
	return vec4(v1.w+v2.w, v1.x+v2.x, v1.y+v2.y, v1.z+v2.z);
}

vec4 operator- (vec4 v1, vec4 v2){
	return vec4(v1.w-v2.w, v1.x-v2.x, v1.y-v2.y, v1.z-v2.z);
}

vec4 operator* (int a, vec4 v2){
	return vec4(a*v2.w, a*v2.x, a*v2.y, a*v2.z);
}

vec4 operator* (float a, vec4 v2){
	return vec4(a*v2.w, a*v2.x, a*v2.y, a*v2.z);
}

vec4 operator* (double a, vec4 v2){
	return vec4(a*v2.w, a*v2.x, a*v2.y, a*v2.z);
}

real operator* (vec4 v1, vec4 v2){
	return real(v1.w*v2.w + v1.x*v2.x + v1.y*v2.y + v1.z*v2.z);
}


void operator+=(vec4 &v1, vec4 v2){
    v1.w += v2.w;
	v1.x += v2.x;
    v1.y += v2.y;
    v1.z += v2.z;
}

void operator-=(vec4 &v1, vec4 v2){
    v1.w -= v2.w;
	v1.x -= v2.x;
    v1.y -= v2.y;
    v1.z -= v2.z;
}

real vec4::module(){
    return sqrt(w*w + x*x + y*y + z*z);
}

void vec4::display(){
    cout.precision(2);
    cout.setf(ios::fixed); 
    //cout.setf(ios::scientific); 
	cout<<"("<<x<<", "<<y<<", "<<z<<")"<<endl;
}
